/*
 * PosittedContainerNodeObject.h
 *
 *  Created on: 03.10.2012
 *      Author: caffeine
 */

#ifndef POSITTEDCONTAINERNODEOBJECT_H_
#define POSITTEDCONTAINERNODEOBJECT_H_

#include "ContainerNodeObject.h"
#include "PositionObject.h"
#include "RotationObject.h"
#include <ISerializationObject.h>

namespace irr{
namespace object{

/***
 * @class PosittedContainerNodeObject
 * Класс сочитает в себе класс ContainerNodeObject обеспечивая работу контейнера и PositionObject обеспечивая работу позиций.
 * Если попытаться изменить координаты объекта, с отсутствующим контейнером, то позиция установится, а после создания
 * контейнера ему будет установлена установленная ранее позиция.
 */

class PosittedContainerNodeObject: public virtual ContainerNodeObject,public virtual PositionObject,public virtual RotationObject,public virtual ISerializationObject{
protected:
	virtual irr::scene::ISceneNode*createAndGiveNode();
	virtual irr::core::stringc getSerializationNodeName()=0;
public:
	void updateContainerPosition();
	PosittedContainerNodeObject(irr::scene::ISceneManager*manager,ContainerNodeObject*parent);
	virtual ~PosittedContainerNodeObject();
	virtual irr::core::vector3df getPosition();
	virtual void setPosition(irr::core::vector3df position);
	virtual void setPosition(irr::f32 X,irr::f32 Y,irr::f32 Z);
	virtual void setRotation(irr::core::vector3df position);
	virtual void setRotation(irr::f32 X,irr::f32 Y,irr::f32 Z);
	
	virtual void getSerialized(irr::xml::IXmlNode*node);
	virtual irr::xml::TagResult setSerialized(irr::xml::IXmlNode*node);
};

}//namespace object
}//namespace irr

#endif /* POSITTEDCONTAINERNODEOBJECT_H_ */
